{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# encoding: utf-8\n",
    "\n",
    "import tensorflow as tf\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib\n",
    "# 在 jupyter notebook 中使用 matplotlib\n",
    "%matplotlib inline\n",
    "# matplotlib.use('Agg')  # 服务器端使用 matplotlib\n",
    "import matplotlib.pyplot as plt\n",
    "import os"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "load_norm shape: (105192, 1)\n",
      "[[-0.85610657]\n",
      " [-0.99451862]\n",
      " [-1.14643429]\n",
      " [-1.2432102 ]\n",
      " [-1.32423189]\n",
      " [-1.3366102 ]\n",
      " [-1.23308249]\n",
      " [-1.17906803]\n",
      " [-1.08454272]\n",
      " [-1.03165356]]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "file1 = \"./data/Hourly_load_data_(2005-2015).xlsx\"\n",
    "file2 = \"./data/Hourly-load-data-for-2016.xlsx\"\n",
    "\n",
    "df1 = pd.read_excel(file1, sheet_name=0)\n",
    "df2 = pd.read_excel(file2, sheet_name=0)\n",
    "\n",
    "# 选出第二列\n",
    "load1 = df1[\"Alberta Internal Load\"]\n",
    "load2 = df2[\"Alberta Internal Load\"]\n",
    "\n",
    "# 合并 05-15 年以及 16 年的数据\n",
    "load = pd.concat([load1, load2], ignore_index=True)\n",
    "plt.figure()\n",
    "plt.plot(load)\n",
    "\n",
    "\"\"\"\n",
    "数据做标准化处理\n",
    "\"\"\"\n",
    "mean_val = np.mean(load)\n",
    "std_val = np.std(load)\n",
    "load_norm = (load - mean_val) / std_val\n",
    "\n",
    "\n",
    "\"\"\"\n",
    "增加数据维度\n",
    "\"\"\"\n",
    "load_norm = load_norm[:, np.newaxis]\n",
    "print('load_norm shape: {}'.format(load_norm.shape))\n",
    "print(load_norm[:10])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "#设置常量\n",
    "time_step=20      #time step\n",
    "rnn_unit=64       #hidden layer units\n",
    "batch_size=64     #batch size\n",
    "input_size=1      #input size\n",
    "output_size=1     #output size\n",
    "lr=0.0001         #learning rate\n",
    "\n",
    "train_x, train_y=[], []\n",
    "for i in range(len(load_norm)- time_step - 1):\n",
    "    x=load_norm[i: i + time_step]\n",
    "    y=load_norm[i + 1: i + time_step + 1]\n",
    "    train_x.append(x.tolist())\n",
    "    train_y.append(y.tolist())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_x = np.array(train_x)\n",
    "train_y = np.array(train_y)\n",
    "test_x = train_x[100000:]\n",
    "test_y = train_y[100000:]\n",
    "train_x = train_x[:100000]\n",
    "train_y = train_x[:100000]\n",
    "# 取100条验证集上的数据做验证\n",
    "test_x = test_x[:100]\n",
    "test_y = test_y[:100]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train_x shape: (100000, 20, 1)\n",
      "train_y shape: (100000, 20, 1)\n",
      "test_x shape: (100, 20, 1)\n",
      "test_y shape: (100, 20, 1)\n",
      "[[[-0.85610657]\n",
      "  [-0.99451862]\n",
      "  [-1.14643429]\n",
      "  [-1.2432102 ]\n",
      "  [-1.32423189]\n",
      "  [-1.3366102 ]\n",
      "  [-1.23308249]\n",
      "  [-1.17906803]\n",
      "  [-1.08454272]\n",
      "  [-1.03165356]\n",
      "  [-0.9776391 ]\n",
      "  [-0.7030656 ]\n",
      "  [-0.62204391]\n",
      "  [-0.62992102]\n",
      "  [-0.63329693]\n",
      "  [-0.57365596]\n",
      "  [-0.26307282]\n",
      "  [ 0.09139707]\n",
      "  [ 0.00699948]\n",
      "  [-0.09315233]]\n",
      "\n",
      " [[-0.99451862]\n",
      "  [-1.14643429]\n",
      "  [-1.2432102 ]\n",
      "  [-1.32423189]\n",
      "  [-1.3366102 ]\n",
      "  [-1.23308249]\n",
      "  [-1.17906803]\n",
      "  [-1.08454272]\n",
      "  [-1.03165356]\n",
      "  [-0.9776391 ]\n",
      "  [-0.7030656 ]\n",
      "  [-0.62204391]\n",
      "  [-0.62992102]\n",
      "  [-0.63329693]\n",
      "  [-0.57365596]\n",
      "  [-0.26307282]\n",
      "  [ 0.09139707]\n",
      "  [ 0.00699948]\n",
      "  [-0.09315233]\n",
      "  [-0.1584198 ]]]\n"
     ]
    }
   ],
   "source": [
    "print('train_x shape: {}'.format(train_x.shape))\n",
    "print('train_y shape: {}'.format(train_y.shape))\n",
    "print('test_x shape: {}'.format(test_x.shape))\n",
    "print('test_y shape: {}'.format(test_y.shape))\n",
    "print(train_x[:2])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 定义 placeholder\n",
    "X=tf.placeholder(tf.float32, [None,time_step,input_size])\n",
    "Y=tf.placeholder(tf.float32, [None,time_step,output_size])\n",
    "\n",
    "# 输入层、输出层权重、偏置\n",
    "weights = {\n",
    "    'in': tf.Variable(tf.random_normal([input_size, rnn_unit])),\n",
    "    'out': tf.Variable(tf.random_normal([rnn_unit, input_size]))\n",
    "}\n",
    "biases = {\n",
    "    'in': tf.Variable(tf.constant(0.1, shape=[rnn_unit,])),\n",
    "    'out': tf.Variable(tf.constant(0.1, shape=[output_size,]))\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def lstm(batch):  #参数：输入网络批次数目\n",
    "    w_in = weights['in']\n",
    "    b_in = biases['in']\n",
    "    # 以下三行代码的运算过程如下：\n",
    "    #首先将tensor X转成2维进行计算\n",
    "    #[64, 20, 1] => [64 * 20, 1]\n",
    "    # [64*20, 1] * [1, 64] => [64*20, 64]\n",
    "    # [64*20, 64] => [64, 20, 64]\n",
    "    # 整体是计算了输入\n",
    "    input=tf.reshape(X,[-1, input_size])\n",
    "    input_rnn=tf.matmul(input,w_in)+b_in\n",
    "    input_rnn=tf.reshape(input_rnn,[-1,time_step,rnn_unit])  #将tensor转成3维，作为lstm cell的输入\n",
    "    cell=tf.nn.rnn_cell.BasicLSTMCell(rnn_unit)\n",
    "    init_state=cell.zero_state(batch,dtype=tf.float32)\n",
    "    #output_rnn是记录lstm每个输出节点的结果，final_states是最后一个cell的结果\n",
    "    output_rnn,final_states=tf.nn.dynamic_rnn(cell, input_rnn,initial_state=init_state, dtype=tf.float32)\n",
    "    #[64, 20, 64] => [64 * 20, 64]\n",
    "    #[64 * 20, 64] * [64, 1] => [64*20, 1]\n",
    "    # [64*20, 1] + bias => [64 * 20 ,1]\n",
    "    output=tf.reshape(output_rnn,[-1,rnn_unit]) #作为输出层的输入\n",
    "    w_out=weights['out']\n",
    "    b_out=biases['out']\n",
    "    pred=tf.matmul(output,w_out)+b_out\n",
    "    return pred,final_states"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "def prediction():\n",
    "    y_predict = []\n",
    "    y_true = []\n",
    "    pred,_=lstm(1)    #预测时只输入[1,time_step,input_size]的测试数据\n",
    "    saver=tf.train.Saver(tf.global_variables())\n",
    "    with tf.Session() as sess:\n",
    "        new_saver = tf.train.import_meta_graph('./model/best_validation.meta')\n",
    "        new_saver.restore(sess, './model/best_validation')\n",
    "        start = 0\n",
    "        end = start + 1\n",
    "        while end < len(test_x):\n",
    "            pred_ = sess.run([pred], feed_dict={X:test_x[start:end]})\n",
    "            y_predict.append(pred_[0][-1][0] * std_val + mean_val)\n",
    "            y_true.append(test_y[start][-1][0] * std_val + mean_val)\n",
    "            start += 1\n",
    "            end = start + 1\n",
    "    plt.figure()\n",
    "    plt.plot(list(range(len(y_predict))), y_predict, color='b')\n",
    "    plt.plot(list(range(len(y_predict))), y_true, color='r')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from ./model/best_validation\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "prediction()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
